//
//  InputClient.cpp
//  Projet A2014
//
//  Created by Jules Thuillier on 03/11/2014.
//  Copyright (c) 2014 Jules Thuillier Erwan Marchand. All rights reserved.
//

#define _CRT_SECURE_NO_WARNINGS 

#include "InputClient.h"
#include <winsock2.h>
#include <stdio.h>
#include <windows.h>
#include <string.h>

InputClient::InputClient()
{
    
}

InputClient::~InputClient()
{
    
}

/// Demande l'adresse IP du serveur au client sur l'invite de commande
char* InputClient::getIP()
{
    bool ipValide = false;
   // char *tabIP = new char[16];
    
    while(!ipValide)
    {
        std::string ip;
        std::cout << std::endl << "Entrez l'adresse IP du serveur : ";
        std::getline (std::cin,ip);
        
        // Conversion string to char
		/**tabIP = new char[ip.length() + 1];
		strcpy(cstr, ip.c_str());

		strcpy_s(tabIP, 16, ip.c_str());
        tabIP[sizeof(*tabIP) - 1] = 0;
		std::cout << std::endl << ip;*/
		char *tabIP = new char[ip.length() + 1];
		strcpy(tabIP, ip.c_str());

		if (isValidIP(ip)) {
            return tabIP;
        }
        
    }
	return new char[0];
}

/// Demande le port du serveur au client sur l'invite de commande
char* InputClient::getPort()
{
    int monPort = 0;
    std::string port;
    
    while(monPort < 5000 || monPort > 5050)
    {
        
		std::cout << std::endl << "Entrez le port sur lequel se connecter : ";
        std::getline (std::cin,port);
        monPort = atoi(port.c_str());
        
        if(monPort < 5000 || monPort > 5050)
			std::cout << std::endl << "ERROR : Port incorrect, doit être compris entre 5000 et 5050.";
    }
    
    // Conversion vers char*
	char *tabPort = new char[port.length() + 1];
	strcpy(tabPort, port.c_str());
    
    return tabPort;
}

/// Verifie si l'adresse IP donnée a un format correct
bool InputClient::isValidIP(std::string tabIP)
{
    int digitCounter=0;
    int dotCounter=0;
    
    for (unsigned int i=0; i<tabIP.length(); i++) {
		if (isdigit(tabIP[i])) {
            digitCounter++;
        }
        else if (tabIP[i]=='.' && i!=0){

			// Plus de 3 chiffres par blocs ou moins de 1
			if (digitCounter > 3 || digitCounter < 1)
				return false;

            digitCounter=0;
            dotCounter++;
        }
		else
		{ 
			return false;
		}
           
    }
	
	if (dotCounter != 3 || digitCounter > 3 || digitCounter < 1)
        return false;

    return true;

}

